23

» WarCraft 3 / Добавление типа юнита в юнит групп.

Похожие вопросы:

ответ
глобальный массив не нужен. сохраняй группу в хэш-таблицу на хэндл героя, потом загружай ее когда надо. у каждого героя будет своя группа
вот пример, молот бурь съедает юнита а удар грома ставит всех юнитов обратно
ответ
Вы хотя бы BJ разворачивали.
local unit q                       			  //Юнит, который добавляется в группу
local unit w = GetTriggerUnit()      //Юнит, который триггерит триггер
local group g = CreateGroup()                      			  //Группа, в которую все юниты входят
local integer j = GetHandleId(w)    //Узнаём ID юнита, который триггерит триггер

set q = CreateUnit(GetOwningPlayer(w), 'h00C', GetUnitX(w), GetUnitY(w), bj_UNIT_FACING)
GroupAddUnit(g, q)

// дальше сами...

23

» WarCraft 3 / Общее здание

Похожие вопросы:

ответ
решил проблему костылём - дал возможность рабочему строить только башню - шаблонку, которая в свою очередь может улучшаться в две указанные башни. Взаимосвязь поставить только от башни - шаблонки. Лимит поставил на башню шаблонки.
Но тема не закрыта. Хотелось бы узнать можно ли решить проблему без костылей.
ответ
Триггерно прописать. Юнит умирает. Условие: убивающий юнит равно герой и равно игрок12. Умирающий юнит равно здание. Действие дать золото.
ответ
Steal nerves:
AgaraSatan, так и думал.
там нужно не тип "исследуемый юнит", там другая переменная "переключаемый юнит (англ. triggering unit)". Исследуемый юнит - работает при событии юнит изучает/исследует. у тебя условие просто не прокатывает. делай дебаги

23

» WarCraft 3 / Анимация юнита

Принятый ответ
Похожие вопросы:

ответ
Suite, вот только придётся каждый раз вручную юзать этот спелл
SсRealm, ты вопрос прочти прежде чем писать всякий бред
нормальным способом момент добычи отловить нельзя
недавно кидали костыль позволяющий отловить удар по дереву но он тут не особо поможет
ибо анимации будут перебивать друг друга
в общем как и сказал Suite меняй это в самой модели
ответ
Переименуй анимацию в модели в например Stand Alternate и 1) и добавляй соответствующий тег или 2) проигрывай анимацию по индексу.
ответ
странно, но в любом случае, я снова дал не ту, эта именно обновляет скин - мороз, оживление, вот это всё пересчитывает. Вот функция смены модели:

function ChangeUnitModelTo takes unit u, string modelpath returns nothing
	local integer a
	local integer s
	set LastConvertedHandle=ConvertHandle(u)
	if LastConvertedHandle>0 then
		set a=RMem(LastConvertedHandle)+0x88
		if a>0 then
			set a=RMem(a)
			if a>0 then
				set s=GetStringAddress(modelpath)
				call CallThisCallWith3Args(a,LastConvertedHandle,s,1)
			endif
		endif
	endif
endfunction
ответ
Короткий ответ, нет. Такой функции не предусмотрено.
В своих роликах я решил это так. Начинаю проигрывать анимацию по индексу на максимальной скорости. С помощью таймера через отрезок времени продолжаю проигрывать анимацию уже на нормальной скорости. Зная анимацию можно посчитать сколько времени нужно указать таймеру чтобы анимация достигла нужного места. Таким образом игроку будет казаться что анимация проигрывается с какого-то места.
Другой способ это изменить модель. Создать новую анимацию и скопировать или переиспользовать кадры.

23

» WarCraft 3 / Карта в ворлде не открывается

Похожие вопросы:

ответ
Это твой антивирусник украл, в карантин
Но да, мне тоже кажется, что это тупо реклама своей карты
С компа ничего не может пропасть просто так. Либо антивирус удалил, либо какой-то вирус перенес её в самую задницу твоих файлов на компе. Если бы карта была удалена, то она бы оказалась в корзине, если конечно она у тебя не весит 3-4 гига, чтобы удалить безвозвратно.
А так, обычно антивирусник уносит в карантин и там их держит

23

» Администрация XGM / Реклама

Похожие вопросы:

ответ
Ссылки на radikal запрещены. ipicture тоже загибается, так что используйте наш хостинг или imageshack
ответ
Спасибо за предложение, уберём.
ответ
Почему бы не добавить поддержку картинок с imgur.com? Есть вообще такая возможность?
Нет, и не будет
ответ
Скорее всего бага в хроме... лично такой проблемы не наблюдаю. Да яндекс засылает разные запросы, для отслеживания длительности сессии. Это нам помогает для планирования нового UX. Попробуй сбросить кеш.
ответ
Должно быть

23

» WarCraft 3 / Озвучка и текст

Похожие вопросы:

ответ
Тема закрыта.
Выбери ответ.
ответ
Adobe Audition для работы со звуком.
Cubase или FL studio для обработки тоже подойдут, там тысячи плагинов накачать можно чтобы звук обрабатывать.
Но если ты ищешь кнопку "Сделать офигенно" - то такого нет.

23

» WarCraft 3 / У меня очередной вопрос

Похожие вопросы:

ответ
Артас Менетил:
Ну нет. Не всегда удобно ковыряться в чужих картах. Объясню на пальцах.
Есть категория действий "Буфер игры". Вот что в ней есть:
  1. Create game cache - создать кэш с указанным именем. Если в двух разных картах создать кэши с одними и теми же именами, то кэш будет общим - можно переносить информацию с одной карты на другую.
  2. Save unit/integer/real/boolean/string - сохраняет переменную (если юнит, то все его параметры) в кэш.
  3. Save cache. После записи чего-ибо в кэш его следует сохранить
  4. Load unit - загружает юнита из кэша и создаёт его на карте.
Чтобы загрузить из кэша переменную, это следует делать при помощи функций этого типа.
ответ
>> IssueInstantTargetOrder: The only use of this function is to make units give items from their inventory to other units. The order in this case would be smart, the target widget is the item and the instant target widget is the target unit. The ordered unit will then move towards the target unit and hand the item over.
>>These natives have terribly confusing names, but I've heard that they are for manipulating items. I.e. Give this item (one widget argument) to this unit (another widget argument) or drop it at this point. I don't know which argument is the item and which is the target unit though.
гугл помог, а память подвела, покупка через Neutral* приказы делается
ответ
~8gabriel8:
Что за RotD?
Как я понял, смена оружия не является способностью героя, а просто способность воина, как скрытие в тени у Тиренд. У меня пока нет времени подготовить триггер, да даже посмотреть на файл FrigatPlay времени нет, но лучше у него посмотри, как он и предложил.

23

» WarCraft 3 / Текстуры склонов

Похожие вопросы:

ответ
Сначала, Хоффман, думал обозвать тебя лентяем, но потом не удивился, почему ты ничего не нашел !!!
Близзарди засунули ети текстуры очень глубоко:
в архиве War3x.mpq есть архивы с названиями в виде букв английского алфавита, так вот твои заветние текстуры ето Cliff0.blp и Cliff1.blp в архиве Z.mpq.
Итого: War3x.mpq / Z.mpq / ReplaceableTextures / Cliff / Cliff0.blp
War3x.mpq / Z.mpq / ReplaceableTextures / Cliff / Cliff1.blp
ответ
Как вариант - попытаться в одной текстуре клиффов попробовать разместить сразу два визуальных решения.
Текстуры клиффов находятся в mpq архиве по адресу ReplaceableTextures\Cliff\
Текстура клиффов
A. рандумные поверхности клиффов
B. тайлинг прямых граней, верхушка клиффа
C. тайлинг прямых граней, низ клиффа
D. угловые тайлы, выбирается 1 рандумный
E. угловые тайлы, низ клиффа
F. применяютя у мостов и подъёмников
Каждому клиффсету принадлежит два файла:
Угловатые клифы ReplaceableTextures\Cliff\Cliff0.blp
Прямые клифы ReplaceableTextures\Cliff\Cliff1.blp
Вроде всё правильно написал, если не прав поправьте.
ответ
Решение: перерисовать клиф, обновить в формат blp. залить в карту.
ответ
В файле war3x.mpq есть несколько маленьких mpq для каждого тайлсета. Конкретно текстуры Короны лежат в i.mpq

23

» WarCraft 3 / Не открывается карта

Похожие вопросы:

ответ
Я не уверен, но возможно функция DestroyTrigger есть в JNGP 5d exp.2, но нет в JNGP твоего друга? Пусть он попробует открыть карту в JNGP 5d exp.2.
ответ
Варианта два - допротектили карту либо у тебя преаддоненый варик. Чаще встречается первое.
ответ
во первых: не надо дублировать вопросы
во вторых: у меня твоя карта открывается
правда я не настолько сумасшедший чтобы юзать вин10
в третьих: размер мапы большой и может тупо не хватать памяти (особенно если юзаешь вин10)
советую попробовать переустановить jngp
если не поможет то сменить винду
ответ
Steal nerves:
JNGP снимает ограничения (например максимум декорации 20к), если обычным редактором открыть критует. В jngp есть новые гуишные функции, которых нет в обычном, стандартный редактор их не распознает. Юзайте поиск, такой вопрос уже задавали
можно вместо новых триггерных команд юзать нативки. Писать например через Custom Script или вообще на jass

23

» WarCraft 3 / Еще кое что...

Похожие вопросы:

ответ
cJass, vJass и Jass2 - разные концы одной палки. Но после освоения структур, которые есть в vJass и освоения синтаксиса cJass ты вполне сможешь быстро освоить любой язык C-семейства.
  1. mpq
ответ
Скачиваешь этот файл: xgm.guru/files/100/179980/comments/336580/War3Patch.txt
Далее открываешь архив War3Patch.mpq в редакторе mpq (например Ladik's MPQ Editor) и используешь файл в качестве listfile.
Модель будет лежать по этому пути: Units\Creeps\HeroTinker\HeroTinker.mdx
ответ
Перед созданием юнитов записать в переменную случайное число, а после - сделать проверку через If / Then / Else. Если (переменная) = 1, то дать каждому юниту в playarena[integer B] нужный предмет.
ответ
Steal nerves:
Тестил, тестил. Думал найду ошибку. Короче не знаю в чем дело, видимо и в правду баг. Решил по-другому. Ловить поставку, и ловить продажу. То есть ловить то, что пришло, и то, что ушло.
событием - "юнит закладывает в лавку" (EVENT_PLAYER_UNIT_PAWN_ITEM) ловим продажу итемов.
GetSellingUnit() =продающий торговец (типа всякие предметы закладывает в магазин и получает деньги)
GetBuyingUnit()=GetTriggerUnit() = покупающий торговец (это обычно магазин)

событием - "юнит закладывает из лавки (продает артефакт)" (EVENT_PLAYER_UNIT_SELL_ITEM) ловим покупку итемов
GetSellingUnit()=GetTriggerUnit()=продающий торговец (обычно это магазин)
GetBuyingUnit() = покупающий торговец (наш герой получает артефакты)
Решил, я по-своему. Короче, видимо, итем в магазине исчезает при добавлении. Попробовал запоминать все добавленные итемы, и при добавлении я сначала удалю всё в магазине, а потом заново добавлю. Пришлось, еще порядок (номер слотов) запоминать, а то строятся ключи хэша на строгом порядке. Если возьму и заберу итем посередине, придется заново выстраивать порядок.
Не знаю, пока тестил много времени, пока без косяков. Главное, что работает. Меня это радует. Но пока не буду спешить. Мне бы хотелось затестить норм.
ответ
~8gabriel8:
Надо было бы карту приложить, чтобы другие с патчем 1.31 могли проверить, будет ли у них запускаться.

23

» WarCraft 3 / Мне нужна помощь с 1 скилом.

Похожие вопросы:

ответ
Функция называется MakeAbilityPermanent в JASS, если есть JNGP, то в ГУИ найдёте
ответ
Ты так описал, что я тоже запутался. Но реализовать это можно только заменой скиллов. Чтобы душа не терялась, нужно хранить её в отдельной переменной (или в Custom Value юнита, например) и в зависимости от значения переменной ставить нужную версию скилла.
ответ
~8gabriel8:
Заинтересовался и решил попробовать сделать. Для скорости взял Торнадо (замедление), где поставил вместо отрицательного модификатора положительный, а для восстановления здоровья ауру фонтана жизни. Сделал три триггера для способности, плюс триггер на случайное движение войск:
  • Инициализации триггер при изучении способности добавляет герою ауру замедления, которая на самом деле ускоряет, просто поленился менять описание. Этот триггер надо отключить после использования, добавив действие Turn off (This trigger);
  • Первый триггер должен был убирать ауру замедления и давать ауру восстановления, но у меня никак не получалось указать правильное событие для способности, срабатывали одновременно и первый, и второй триггеры. Тогда я поставил в событие приказ без указания цели, указал в условии immolation, всё стало нормально функционировать;
  • Второй триггер наоборот убирает ауру замедления и даёт ауру восстановления при приказе unimmolation.
Кроме того, что эта способность является приказом, интересно и то, что аура восстановления не действовала, если её просто скопировать в нестандартные способности, ничего не изменив, а аура замедления не действовала, если изменить её радиус действия с 600 до 900.
P. S. Там ещё триггер надо сделать, когда у героя мана заканчивается для применения способности, так как аура восстановления не пропадает, а аура замедления не появляется.

23

» WarCraft 3 / Свечение героя

Похожие вопросы:

ответ
Загрузилось наконец. Посмотрел. Это "крепление ориджин" косячит.
Исправил.
Хозяин Миров, годится?
В положительном случае выбери ответ на вопрос.
ответ
Открываешь героя в Mdlvis, выделяешь свечение, копируешь его, затем не закрывая модель, открываешь в этом же окне модель здания, будет вопрос хотите открыть новую модель? Ответ да. В открывшейся модели выбираешь точку любой поверхности с тимколором, и нажимаешь специальная вставка, вуаля, готово.
ответ
ssbbssc:
пересоздать архив кампании\импортировать в каждую карту отдельно
Попробую, а под пересоздать что имеется ввиду?
Помогло вот что, триггерное добавление абилки "свечения"
Я ставил сначало импорт атача в каждую карту кампании, по отдельности в сражении все работало
но, при переходе по кампаниям именно эта способность "свечения "отказывалась крепиться герою, а все остальные скиллы без проблем работают
Меня это достало и я просто давал скилл при вывозе юнита с кэша в переходе между картами, и все работает, тьфу тьфу)
ответ
В мдливсе каждую глоу плашку крепишь к своей кости. В свойствах кости ставишь галочку "синфазность" (или билборд в War3ModelEditor'e ).
ответ
Можно через пассивную способность без иконки сделать на основе Atol в самой игре.

23

» WarCraft 3 / Интерфейсы

Принятый ответ
Похожие вопросы:

ответ
Вот я тоже интересовался этим, но у меня проблема наоборот в отображении нужных элементов. Когда скрываешь основной интерфейс, исчезает все! Остается лишь панель управления, если применить :
call BlzHideOriginFrames(true)
call BlzFrameSetAllPoints(BlzGetOriginFrame(ORIGIN_FRAME_WORLD_FRAME, 0),BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0))
Если же добавить ко всему этому еще и
call BlzFrameSetAllPoints(BlzGetFrameByName("ConsoleUI",0),BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0))
То исчезает и панель управления
После всего этого пытался отобразить кнопки Меню, Логи, Союзники и Задания по отдельности с помощью
set ppp=BlzGetOriginFrame(ORIGIN_FRAME_SYSTEM_BUTTON,0)
call BlzFrameSetVisible(ppp,true)
Но оно не отображало...затем попробовал
set ppp=BlzGetFrameByName("UpperButtonBarMenuButton",0)
call BlzFrameSetVisible(ppp,true)
И оно отобразило все четыре элемента меню, но мне это не надо...
Почему нельзя просто убрать все эти противные рамочки-картиночки и оставить/удалить/переместить все как надо, почему опять все через одно место...
Либо я дурак, либо это все кривое...Уже 2 день сижу и пытаюсь сделать одно и то же и все через одно место, то одно то другое...короче я х3
ответ
~8gabriel8:
Скачай какой-нибудь нестандартный интерфейс, там указаны пути импортирования файлов. Причём указаны для замены у определённой расы - human, orc, undead, nightelf.
Если же хочешь свой создать, то с помощью соответствующих графических программ сохрани эти blp, как png, внеси изменения, потом опять сохрани в blp.
ответ
Сам задал, сам ответил.
call BlzFrameSetParent выручает ситуацию, т.е. устанавливаешь предка, который не скрыт(любой созданный через blzCreateFrame, и к нему вешаешь.
ответ
~8gabriel8:
На 1.31 не знаю, на 1.26 достаточно файлы в mpq заменить, либо новый архив создать с ними. Скоро Reforged выйдет, станет не до этих модификаций.

23

» WarCraft 3 / Что не так?

Похожие вопросы:

ответ
Да у тебя куча дыр, во-первых ты не запустил триггер 115 области lumber direction, и оно соответственно не реагирует на событие. Во-вторых перепроверь gold проверку условия на да или нет в той карте которую ты отправил стоит нет
А золото не движется потому что ты ожидание 0,5 сек поставил а область в милисекунде от изначальной то есть триггер не успевает запуститься
ответ
Viktor19:
Путь текстуры правильно указал?
да, сейчас вообще обратил внимание что текстуры идущие в комплекте не воспринимаются почему-то, а именно "Shield.blp".
Все равно проблема не решилась, вроде бы смог заменить текстуру, которую не видел но варик не воспринимает модель.
1
ответ
Afterdeath, скрин не могу, я с мобильного сейчас. Текстом напишу, по памяти.
Действия:
Pick every unit in playable map area and do multiple actions:
If picked unit belongs to ally of (Игрок 1) = да then (это союзник игрока 1).
Hide picked unit.
ответ
Roy Mustang:
Slork:
Поставь matching unit вместо picked unit.
ответ
Делай мвссив с индексом равным номеру игрока (чтоб не запутаться) При событии ставь условие на триггеринг игрока. Если триггенинг игрок = красный то перекидывай соотв. юнита по индексу. напр MyHero[1]. Используй if then else. Все вместится в 1 триггер с кол-вом событий равным кол-ву игроков.

23

» WarCraft 3 / Помощь в Депротекте карты

Похожие вопросы:

ответ
kittysatalyash:
8gabriel8, Ландшафт собственно не пострадал, просто размеры карт кардинально не совпадают и мне самому проще как-то не по человечески копировать ландшафт и декор, так что вот такие пироги
RiderOfBalance, Ок, я нашёл открытый дрп и скопировал от туда триггеры и заменил. Та открытая дрп работает, на своём я ещё не пробовал, но надеюсь что всё будет работать.
RiderOfBalance, я поставил триггеры с открытой соты, всё ещё не работает, так же я попробовал вообще удалить триггеры и так же всё ещё не работало. Следовательно, скорее всего триггеры тут не причём...
war3map.j:1: parse error
war3map.j:1: Statement outside of function
war3map.j:1: Statement outside of function
war3map.j:1: Statement outside of function
war3map.j:2: Statement outside of function
war3map.j:2: Statement outside of function
war3map.j:3: Statement outside of function
war3map.j:3: Statement outside of function
war3map.j:3: Statement outside of function
war3map.j:4: Statement outside of function
war3map.j:4: Statement outside of function
war3map.j:7: Undeclared variable cj_tmpgr_copy_nw509ert7
war3map.j:9: parse error
war3map.j:9: Statement outside of function
Ниже скриншот с начало .j кода.
Это лишь малая часть проблем, так же в коде есть переменные, чьи имена начинаются с цифр (что недопустимо во всех языках программирования, если мне не изменяет память).
Собственно потому, в .j миллиард ошибок, можешь приложить оригинал карты? Потому что версию, что ты загрузил имеет просто умертвлённый скрипт.

23

» WarCraft 3 / Не находится игра

Похожие вопросы:

ответ
Ну вот собственно сама карта, я проверял - запускал - всё работает.
ответ
писать прогу которая будет перехватывать события клавиатуры и отсылать команды вар3 (проще всего события клика мышкой)
для этого тебе нужно знать какой нибудь прикладной яп
и понимать как работают процессы/устройства ввода
но подобные вопросы не относятся к мапмейкерству вар3
ответ
Поскольку его не пугает наличие большого влияния промахов на геймплей - скорее всего он делает рпг. Имхо в рпг всегда клево смотрятся тексттаги полученного урона, для создания которых необходимы триггеры на отлов получения урона. А отлавливаемый урон - можно и прохилить.
Для прохила(и вообще всех манипуляций с задержкой в 0.00 сек) лично я юзаю такие костыли:
Либа здесь только для доп табуляции. Я за чистый жасс + дефайны.
library ZeroTimeEvent

    globals
        constant integer ZTEArraySize = 64//Even 32 is alot, 64 is too much! Exactly what I need!
        timer Zero//Used for 0. sec uses
        integer ZTECurrent = 0
        unit array ZTEUnits[ZTEArraySize]
        integer array ZTEIntegers[ZTEArraySize]
        real array ZTEReals[ZTEArraySize]
        trigger array ZTETriggers[ZTEArraySize]
    endglobals
    
    function ZeroTimeEvent takes nothing returns nothing
            loop
                set  ZTECurrent = ZTECurrent - 1
                call TriggerExecute( ZTETriggers[ZTECurrent] )
                exitwhen ZTECurrent < 1
            endloop
    endfunction
    
    #define ZTEAddUnit(u) = {
        set  ZTEUnits[ZTECurrent] = u
    }
    
    #define ZTEAddInteger(i) = {
        set  ZTEIntegers[ZTECurrent] = i
    }
    
    #define ZTEAddReal(r) = {
        set  ZTEReals[ZTECurrent] = r
    }
    
    #define ConfirmZTE(trig) = {
        set  ZTETriggers[ZTECurrent] = trig
        set  ZTECurrent = ZTECurrent + 1
        call TimerStart( Zero, ZeroTime, false, function ZeroTimeEvent )
    }
    
    
    
endlibrary
Пример использования
#define UnitRemoveForceAttack(u) = {
    call UnitAddAbility( u, 'Abun' )
    call UnitRemoveAbility( u, 'Abun' )
         ZTEAddUnit(u)
         ConfirmZTE(CheckIfUnitHasA002)
}
Минус такой системы в необходимости создавать триггер для каждого блока кода, т.к. массивы блоков кода запрещены
ответ
Я прямо через аудасити пишу в сингл тренировке, тупо, зато совсем нетрудно.
Вот тут еще есть прямо готовые саундсеты хотса (нужна рега). wcunderground.freeforums.org/soundsets-f37.html
По сабжу с архивом помочь не могу, не разбираюсь, но мб это пригодится.

23

» WarCraft 3 / Создание юнита после смерти

Похожие вопросы:

ответ
да, нужно, иначе будет накапливаться со временем и игра начнет тормозить
ответ
Группы юнитов + хэш или структуры. При касте спелла берешь кастера, берешь его ID, проверяешь не записана ли группа в какой-либо из ячеек. Если нет - создаешь группу и записываешь её в ячейку. При смерти юнита делаешь проверку не записана ли по его ID группа юнитов - если записана - удаляешь его и проверяешь количество юнитов в группе и если оно равно 0 - удаляешь группу. Естественно хэш тоже чистишь всюду где нужно.

Это звучит как "Сделайте мне пожалуйста систему формаций". Чтобы научить тебя как это сделать придётся потратить несколько десятков часов. И тут 2 варианта: либо ты будешь читать статьи и выучишь всё сам, либо обращайся к отдельным пользователям и проси о приватных, платных, уроках в частном порядке.
Вопрос вообще ни о чём. То, о чём ты спрашиваешь делается за 20-30 минут + несколько часов на всякие плюшки и дебаг (в худшем случае).
Конкретно тебе стоит почитать о Локальных переменных, Хэше или Структурах.
ответ
вариант №1 - не нулить переменные, оставляя утечки номеров хендлов. это безопасно, да, если знаешь, что делаешь.
№2 - ловить UNIT_DEATH и чистить за ним
ответ
Steal nerves:
ну это совсем. такие вопросы. вам надо изучить триггеры.
ну с другими характеристиками, вам тогда нужно пересоздать юнита.
событие - юнит умирает <=найдете
условие - твой тип (триггер юнит) равно "укажите свой" <= сравнение тип юнита type of unit
действие - создать юнита (игроку-владельцу (триггер юнит)), тип, позиция умирающего <= раздел боевая единица, самое первое действие CreateUnit
есть способности сумонов пауков, гидры (см. тема)
ответ
~8gabriel8:
Надо, конечно, взглянуть на триггеры в карте, но при спавне удалять нужно не только точки, но и группы, так как при спавне создаются не только юниты, но и группа для них (даже из одного юнита группы). Без утечек создание юнитов выглядит так:
вот код для custom script:
call DestroyGroup( GetLastCreatedGroup() )
call RemoveLocation( udg_P )
Если отдаёшь приказ группе юнитов отправиться в область, там тоже создаётся группа и точка, тоже нужны эти custom script. Но вообще сомнительно, что это вызывает дикие лаги через два часа. Наверное, есть какие-то события с малым периодом, что тоже плодят утечки, поэтому и надо триггеры в карте смотреть.

23

» WarCraft 3 / Проблема с ИИ

Похожие вопросы:

ответ
проблема в том что они создаются триггерно
посмотри содержимое бж функции которая даёт стартовых юнитов
там вроде должно быть решение
ответ
Я думаю что ошибка находится в аргументе. Покажите файл.
ответ
Всё я исправил проблему.Надо было просто поставить тригер выше создать начальных юнитов.
ответ
Не сов сем по теме, но близко - вот такое можно реализовать на новых функциях 1.31
Увы, полноценного инвентаря на аналогичных функциях пока не выкладывали в общий доступ, каждый пилит себе свою версию.
ответ
~8gabriel8:
Приложить файл кампании, чтобы посмотрели. И какая версия игры?

23

» Администрация XGM / Как удалить акк?

Похожие вопросы:

ответ
Без явных доказательств принадлежности этого аккаунта - никак. Есть есть, то просьба обратиться в личку или через форму обратной связи (с указание контактного почтового адреса)
ответ
Напиши в личку.
ответ
Roy Mustang:
Чтобы сменить ник нейм нужен 1 свободный поинт, который ты потратишь на эту функцию (поинты дают за каждый лвл)

23

» WarCraft 3 / 1 таймер много юнитов!

Похожие вопросы:

ответ
Audes, просто написать
angle-=180
ответ
Нашёл систему, где звук передаётся в таймер, который истекает через 0 секунд. В результате один и тот же звук может проигрываться несколько раз без всяких проблем. В инетике пишут мол это такой баг движка.
ответ
ClotPh:
Ige, т. е. как-то так (при инициализации)?
call Preload (war3mapImported\SingerOfDeath1.wav)
call Preload("war3mapImported\\SingerOfDeath1.wav")
ответ
Есть стандартная способность "Бродячий". Она задает рандомное движение всяким птицам, жабам и прочим нейтральным зверюшкам, которых в то же время можно убить. Я бы попробовал ее использовать, но не уверен, что она не только для пассивных юнитов.

23

» WarCraft 3 / Изменить описание способности

Принятый ответ
Похожие вопросы:

ответ
можно либо заменять юнита, либо химичить с тексттагами(то есть сделать систему имен игровых обьектов на тексттагах), ещё есть функция для смены имени игрока
код
native SetPlayerName            takes player whichPlayer, string name returns nothing
предметам имена изменять нельзя
способности могут быть с таким же успехом удалены, добавлены
этим
native UnitAddAbility               takes unit whichUnit, integer abilityId returns boolean

native UnitRemoveAbility            takes unit whichUnit, integer abilityId returns boolean
подробнее насчет предметов, думаю можно похимичить с кастом велью, устанавливать его
функциями
native          SetItemUserData takes item whichItem, integer data returns nothing

native          GetItemUserData takes item whichItem returns integer
и
функциями
native S2I  takes string s returns integer

native I2S  takes integer i returns string
конвертировать, потом выводить строки на экран через
это
native DisplayTextToPlayer          takes player toPlayer, real x, real y, string message returns nothing
с таким же успехом можно использовать хеш-таблицы, для аттача описания к чему-либо.
Ещё есть вариант, с описанием предметов и способностей в квестах.
В общем без гемора, и написания левых систем никак)
ответ
~8gabriel8:
Проблема оказалась в том, что в игре теперь вместо прежнего выбора Aneu используется способность Anei, которой нет в редакторе у меня и, наверное, у тебя.
Название и описание для неё нужно редактировать в файле Units\NeutralAbilityStrings.txt, в карте пример xgm.guru/files/100/221818/comments/412020/0.w3x, экспортируешь из неё файл, ищешь строки и редактируешь их, импортируешь себе.
ответ
Да.
Открываешь карту MPQ Editor, извлекаешь оттуда файл war3map.wts, там хранится почти весь текст карты.
Найти описание юнита можно по его имени ли равкоду через поиск текста. Подробное описание называется Ubertip, подсказка (то, что над стоимостью юнита) - Tip. Там же можно изменить горячую клавишу (Hotkey).
Редактируешь и изменённый файл импортируешь назад в карту тем же MPQ Editor, перед этим лучше сохранить старую версию war3map.wts или всей карты.
Есть альтернативный способ: в самом редакторе Файл - Экспортировать Строки. Редактируешь и изменённый файл импортируешь аналогичным способом (в редакторе): Файл - Импортировать Строки.

war3map.wts имеет определённый формат, перенос строки через CRLF и кодирование UTF-8-BOM. Если что-то из этого изменить, то файл будет нечитабельным для карты, и при следующем сохранении редактор просто его перезапишет, обнуляя все текстовые изменения.

Ну и почему ресурс пропал из ленты проектов?

23

» WarCraft 3 / Импорт звуков

Похожие вопросы:

ответ
при импорте звука
Проверь дискретизацию и качество. Должно быть, как у стандартных звуков.
ответ
меня после импорта вес переваливает более чем за 8МБ :(
Потому что звук весит более 7 мегабайт. Нужно сжимать, есть даже онлайн-сервисы.
ответ
Настройки в редакторе звуков, флаг "Позиционный" проверь
+проверь битность импортируемого мп3. Как раз в статьях и будет ответ!
ответ
Capitan Alex:
Уже нашел, Редактор звука Ctrl+f Flashback1

23

» WarCraft 3 / Что за ошибка?

Похожие вопросы:

ответ
XGM Bot:
Похожие вопросы:

ответ
Меню RtC - убери галочку с enable.
ответ
экстрасенсы свалили на Гавайи
ответ
  1. Если юзал JNGP, залезь в папку backups - мб там остались работоспособные недавние копии
  2. Попробуй MPQ Editor, мб удастся что-то вытащить, чтобы не совсем с нуля начинать, если карта таки сломалась
  3. Вообще если карта долго грузится, это не факт, что она не загрузится вообще (хотя, судя по описанию ситуации, вряд ли это твой случай)
ответ
Steal nerves:
Короче порылся в ХГМ, потыкал, все испробывал, и сам нашел ответ, вот несколько моментов для того, чтобы заработал:
  1. Требуется установленный Warcraft 3: The Frozen Throne последней версии 1.26a. Скачайте нормальный варкрафт 3, а то попадаются урезанные или нерабочие версии. Лучше оригинальную версии приобрести, и обновить. Хотя пиратки тоже неплохи. Вот использую сборкой от R.G. Mechanics
  2. Путь к программе НЕ ДОЛЖЕН содержать русских символов
  3. Совершайте установку в отдельную от Warcraft 3 папку
  4. Рекомендуется приостановить антивирусные программы до установки, потом выполнить установку, затем добавить папку c JNGP в исключения, и потом только снова включить антивирусы. Эта программа вторгается в процесс worldedit.exe, поэтому может считаться вредоносной
  5. Не трогайте файл worldedit121.exe, он должен быть и в папке игры и в папке JNGP
  6. Сначала "Сохранить карту", только потом "Проверка карты", а ещё иногда бывает лучше сохранять пару раз
Выше, это стандартное описание для работы. Если не сработает, пробуем вот, что:
  1. Выставляем оптимальные настройки к JNGP, указанные на скрине (см. ссылку) xgm.guru/forum/showthread.php?t=13118 Обычно, эти настройки должны быть изначально после установки JNGP (ну мало ли пригодятся)
Теперь суть моей проблемы (не знаю, что из этих ниже пунктов сработало, но сработало):
  1. Я установил игру и JNGP на рабочий стол. Потому что на диске С, в папках типа Program Files.(x86) и др. блокирует браундмер. Обычно требует назойливо для работы права администратора, очень раздражает. Но сомневаюсь, что заработало из-за этого. Раньше не мешало нисколько.
  2. Запустить JNGP в режим совместимости. Заходим в свойство exe-шника. Поставил семерку.
  3. Если UMS изначально включен, то выключить его и включить (Enable UMS). Потом перезапустить WE. Скорее всего из-за него.
Из-за UMS также бывают ошибки: могут выскачить 2-3 окна : что отсутствует TriggerClearActions и layerAll. Когда пропускаешь эти окна, просто нажав на ок, затем появляется ошибка с памятью и уже потом закрывается редактор. Происходят такие ошибки, если пытаешься открыть обычным редактором карту, отредактированную в JNGP. Такая ошибка происходит, если некорректно настроен UMS (выкл. потом вкл.). Такая ошибка происходит, если открыть обычным редактором взломанную карту, которая наверняка сделана в UMS и использует необычный jass и прочие преимущества JNGP. Ошибки с UMS могут иногда происходить, поэтому скорее всего пункт 10 поможет
  1. Если UMS перестает работать (некорректно работает), а 10 пункт не помогает. То есть плагин UMS по каким-то причинам не запускается, а JNGP стоит галочка напротив UMS (говорит, что включен). Короче узнать, что он запущен, можно при открытий редактора вместо стандартного окна выскакивает окно UMS. Если не выскакивает, надо попробовать завести снова работать. Плагин может по каким-то причинам сломаться (один раз баловался в настройках JNGP). Пробуйте потом удалить JNGP и потом заново переустановить. Или выкл. и вкл, UMS затем выйти из jngp, удалить и заново переустановить
пп
ответ
Не особо шарю, но :
-отключить антивирус
-переустанови jngp

ответ
В случае вылета игры, следует всегда прикреплять к вопросу отчет об ошибке.
Он находится в: "%папка_с_игрой%\Errors\%дата_вылета% Crash.txt".
Вылетает при загрузке данных о предметах.
Удали все предметы и проверь, не перестанет ли вылетать.
Если перестанет, то удаляй предметы по одному, пока не найдешь виновника.
Еще не помешала бы сама карта/кампания, которую нужно было прикрепить вместе с отчетом с самого начала.
ответ
Name Legion:
я тупо тыкаю на нем и сразу выскакивает это ошибкка, он даже не кастуется
кажется проблема в... ну я наверное понял...я сейчас не с компьютера пишу, как буду дома покажу
исправил ошибку...область воздействия не должно превышать размера карты, в этом ошибка была, спасибо
ответ
Лучше писать код на Sublime Text 3 с подсветкой xgm.guru/p/wc3/jass-syntax-sublime-textmate
А потом копировать в мапу
На 1.27b там норм проверка встроенная, и всё чётко работает
ответ
Проблема в самой модели, случился какой-то баг и она перестала работать.

23

» WarCraft 3 / CreateTimer

Похожие вопросы:

ответ
особо не смотри туда, смотри по съеденной оперативке в диспетчере задач
ответ
действительно, почему же не работает?
Это вообще никак не влияет. Ты ещё скажи, что set a = a + 1 не работает.

Дело может быть в том, что юнит за 10 секунд разлагается.
немного исправленный код
function Reborn takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer s = GetHandleId(t)
    local unit dead = LoadUnitHandle (udg_hash, s, 6)
    call FlushChildHashtable(udg_hash, s)
    call CreateUnit(GetOwningPlayer(dead), GetUnitTypeId(dead), GetUnitX(dead), GetUnitY(dead), GetUnitFacing(dead))
    call DestroyTimer(t)
    set dead = null
    set t = null
endfunction

function Trig_Kill_Unit_Actions takes nothing returns nothing
    local unit dead = GetTriggerUnit()                      //Присваиваем убитого юнита
    local timer t = CreateTimer()                              //Создаём таймер
    local integer s = GetHandleId(t)                         //Узнаём его ID
    call SaveUnitHandle(udg_hash, s, 6, dead)       //Сохраняем юнита 
    call TimerStart(t, 10, false, function Reborn)        //Активируем одноразовый таймер на 10 секунд
    set dead = null
    set t = null
endfunction
код с учётом разложения
function Reborn takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer s = GetHandleId(t)
    local player p = LoadPlayerHandle(udg_hash, s, 0)
    local integer id = LoadInteger(udg_hash, s, 0)
    local real x = LoadReal(udg_hash, s, 0)
    local real y = LoadReal(udg_hash, s, 1)
    local real f = LoadReal(udg_hash, s, 2)
    call CreateUnit(p, id, x, y, f)
    call FlushChildHashtable(udg_hash, s)
    call DestroyTimer(t)
    set t = null
    set p = null
endfunction

function Trig_Kill_Unit_Actions takes nothing returns nothing
    local unit dead = GetTriggerUnit()
    local timer t = CreateTimer()
    local integer s = GetHandleId(t)
    call SavePlayerHandle(udg_hash, s, 0, GetOwningPlayer(dead))
    call SaveInteger(udg_hash, s, 0, GetUnitTypeId(dead))
    call SaveReal(udg_hash, s, 0, GetUnitX(dead))
    call SaveReal(udg_hash, s, 1, GetUnitY(dead))
    call SaveReal(udg_hash, s, 2, GetUnitFacing(dead))
    call TimerStart(t, 10, false, function Reborn)
    set dead = null
    set t = null
endfunction
ответ
на жассе - глобальный массив, если таймер один или хештаблица если таких таймеров много
на Lua в 1.31 - есть более удобные способы
ответ
Я полагаю, надо сравнивать вот так, ибо индексация идёт с 1.
GROUP[GetHandleId(unit)][1] == nil
Ну и нужно вот так присваивать.
GROUP[caster_uid][1] = CreateGroup()

23

» WarCraft 3 / lua таблица в таблице

Похожие вопросы:

ответ
Хэштаблицы это костыльнй пережиток jass.
На lua можно же и так
a = {
	b = {
		c = {
			d = function()
				print('work')
			end
		}
	}
}
a.b.c.d()
ответ
ScopteRectuS:
Предполагаю, что делается через какой-то цикл перебором всех элементов таблицы, если элемент является функцией, то запустить.
Правильно предполагаете, но мануалы же никому неинтересны, проже же вопрос задать.
test   = { }
test.a = 123
test.b = true
function test.func0()
	print(0)
end
function test.func1()
	print(1)
end
function test.qab()
	print(2)
end

for k, v in pairs(test) do
	if type(v) == 'function' then
		print(k, ':')
		v()
	end
end
ответ
Документацию то для кого пишут?
DATA = {
	Heroes = {}
}
do
	local PickAHero = CreateTrigger()
	for i = 0, 9 do
		TriggerRegisterPlayerUnitEvent(PickAHero, Player(i), EVENT_PLAYER_UNIT_SELECTED)
	end
	TriggerAddAction(PickAHero, function()
		local hero    = GetTriggerUnit()
		local owner   = GetTriggerPlayer()
		local ownerID = GetPlayerId(owner)
		
		if IsUnitType(hero, UNIT_TYPE_HERO) then
			local x = GetPlayerTeam(owner) == 1 and -7271 or 7271
			local y = GetPlayerTeam(owner) == 1 and -55 or 55
			
			PanCameraToTimedForPlayer(owner, x, x, 0)
			SetUnitX(hero, x)
			SetUnitY(hero, y)
			
			SetUnitOwner(hero, owner, true)
			DATA.Heroes[ownerID] = hero
		end
	end)
end